# coding: utf-8
import json

from ..op.constant import DemandCate
from .models import SMSTemplate
from .constant import TEMPLATE_CODE_MAP


def generate_sms_content(
    template_code=None, nickname=None, demand=None, captcha='', uri='', bid_point='', user_id=0
):
    """
    add by zhouhl 2017-07-26
    根据用户信息，项目信息，渲染短信内容
    """
    if not template_code:
        return ''

    sms_template = SMSTemplate.query.filter_by(
        code=TEMPLATE_CODE_MAP[template_code]).first()
    if not sms_template:
        return ''

    # 替换模板里面的参数
    # 目前涉及到的参数为captcha(验证码),nickname(用户昵称),addr(发布客户地址),demand_info(项目信息),uri(跳转uri)

    content = sms_template.content
    params_list = sms_template.params.split()
    format_params = {}
    if 'captcha' in params_list:
        format_params['captcha'] = captcha
    if 'nickname' in params_list:
        format_params['nickname'] = nickname
    if 'user_id' in params_list:
        format_params['user_id'] = user_id
    if 'addr' in params_list:
        format_params['addr'] = demand.city if demand else ''
    if 'uri' in params_list:
        format_params['uri'] = uri
    if 'bid_point' in params_list:
        format_params['bid_point'] = bid_point
    if 'demand_info' in params_list and demand:
        # 安装 demand_info
        # 面积 + 使用场地 + 颜色 + 间距            + 预算
        # 如：（，约2㎡，户外单色，P10，预算0.4万，）

        # 维修 demand_info
        #        使用场地 + 颜色 + 间距 + 故障描述 + 预算
        # 如：（，半户外单色，P10，无法更换屏幕内容，预算暂无，）

        # 选择其他时的替代值 位置：户外，颜色：全彩，间距：P10

        # 1、面积展示：保留1位小数

        # 2、预算展示：
        # 不足1千，保留单位“百”；
        # 不足1万，保留单位“千”；
        # 超过（包括等于）1万，均已“万”为单位
        # 非整万、整千、整百，四舍五入保留1位小数，
        # 末尾小数为零，则不显示，
        # 末尾小数不为零，则四舍五入保留1位小数，
        # 没有预算或预算小于100，显示“预算暂无”

        demand_info = get_demand_info(demand)

        format_params['demand_info'] = demand_info

    content = content.format(**format_params)
    return content


def generate_app_content(demand, msg_type=0):
    """
    create by ld_wu 2017-11-28
    app 新订单通知内容
    :return:
    """
    if not demand:
        return ''

    demand_info = get_demand_info(demand)
    return dict(
        msg='{cate}订单，位置：{address} {demand_info}'.format(
            cate=demand.cate_display,
            address=demand.city,
            demand_info=demand_info
        ),
        type=msg_type,
        ext=json.dumps(
            dict(demand_id=demand.id)
        )
    )


def get_demand_info(demand):
    demand_info = ''
    # 面积
    if demand.cate == DemandCate.INSTALL.value and demand.size > 0:
        demand_info += '，约{size}㎡'.format(
            size=round(demand.size, 1))

    # 使用场地
    if demand.surr:
        demand_info += '，{surr_display}'.format(
            surr_display=demand.surr_display)
    else:
        demand_info += '，户外'

    # 颜色
    if demand.color:
        demand_info += '{color_display}'.format(
            color_display=demand.color_display)
    else:
        demand_info += '全彩'

    # 间距
    if demand.span:
        demand_info += '，{span}'.format(span=demand.span)

    # 故障描述
    if demand.cate == DemandCate.MAINTAIN.value:
        if demand.malf:
            demand_info += '，{malf_display}'.format(
                malf_display=demand.malf_display)
        else:
            demand_info += '，其他故障'

    # 预算
    if demand.budget < 100:
        demand_info += '，预算暂无'
    elif demand.budget < 1000:
        budget = round(demand.budget / 100, 1)
        tmp_split_budget = str(budget).split('.')
        print('*' * 50)
        print(tmp_split_budget)
        print('*' * 50)
        if tmp_split_budget[-1] == '0':
            budget = int(budget)
        demand_info += '，预算{budget}百'.format(budget=budget)
    elif demand.budget < 10000:
        budget = round(demand.budget / 1000, 1)
        tmp_split_budget = str(budget).split('.')
        if tmp_split_budget[-1] == '0':
            budget = int(budget)
        demand_info += '，预算{budget}千'.format(budget=budget)
    else:
        budget = round(demand.budget / 10000, 1)
        tmp_split_budget = str(budget).split('.')
        if tmp_split_budget[-1] == '0':
            budget = int(budget)
        demand_info += '，预算{budget}万'.format(budget=budget)

    if demand_info:
        demand_info += '，'
    return demand_info
